package com.qianyucc.blog.service;

import cn.hutool.core.bean.*;
import com.qianyucc.blog.exception.*;
import com.qianyucc.blog.global.*;
import com.qianyucc.blog.mapper.*;
import com.qianyucc.blog.model.dto.*;
import com.qianyucc.blog.model.entity.*;
import com.qianyucc.blog.model.pojo.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.stereotype.*;

import java.util.*;

/**
 * @author lijing
 * @e-mail 1413979079@qq.com
 * @date 2020-03-21 10:22
 * @description 与博客配置相关业务
 */
@Service
public class ConfigService {
    @Autowired
    private ConfigMapper configMapper;
    @Autowired
    private Configs configs;

    /**
     * 更新博客配置
     *
     * @param profileDTO 博客个人信息
     */
    public void updConfig(ProfileDTO profileDTO) {
        Map<String, Object> map = BeanUtil.beanToMap(profileDTO, true, true);
        map.forEach((k, v) -> configMapper.update(new ConfigDO(k, (String) v)));
        configs.fromList(configMapper.findAll());
    }

    /**
     * 检查token 是否过期
     *
     * @param token 登录态标识
     * @return token是否有效
     */
    public boolean checkToken(String token) {
        if ("".equals(token) || !token.equals(configs.getAdminToken())) {
            throw new TokenExpiredException();
        }
        return true;
    }

    /**
     * 管理员用户登录
     *
     * @param user 用户名密码对象
     * @return 如果登录成功就返回token，否则返回null
     */
    public String login(AdminUserDTO user) {
        if (user.getUsername() != null &&
                configs.getUsername().equals(user.getUsername()) &&
                user.getPassword() != null &&
                configs.getPassword().equals(user.getPassword())) {
            String token = UUID.randomUUID().toString();
            configMapper.update(new ConfigDO(Constants.ConfigKey.ADMIN_TOKEN, token));
            configs.setAdminToken(token);
            return token;
        }
        return null;
    }

    /**
     * 初始化，当第一次使用该博客的时候，做初始化操作
     */
    public void initConfig() {
        configs.fromList(configMapper.findAll());
    }
}
